package com.wyp.design.pattern.structural.facade;

/**
 * 外观模式--强调应用层不关注子系统具体调用顺讯以及实现，而是通过外观类去调用子系统，符合迪米特法则，但是不符合开闭原则，当有新的子系统加入是，需要重写
 * 修改外观类，当然，为了防止重复修改，可以将外观类定义为一个抽象类，每次进行修改就实现抽象类，在应用层决定如何调用。
 * <p>
 * 积分场景为例
 *
 * @author: Oliver
 * @time: 2020/5/9/9:52
 */
public class PointGiftExchange {
    private QualifyService qualifyService = new QualifyService();
    private PaymentService paymentService = new PaymentService();
    private ShippingService shippingService = new ShippingService();

    public void exchange(PointGift pointGift) {
        if (qualifyService.check(pointGift)) {
            if (paymentService.doPay(pointGift)) {
                System.out.println(shippingService.shipping(pointGift));

            }
        }
    }
}
